package cn.edu.tju.fctl.util;

import cn.edu.tju.fctl.entities.User;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;

public class ShiroUtil {

    /**
     * 获取当前session信息
     *
     * @return ｛@link Session}
     */
    public static Session getSession() {
        return SecurityUtils.getSubject().getSession();
    }

    /**
     * 获取权限subject
     *
     * @return {@link Subject} 对象
     */
    public static Subject getSubject() {
        return SecurityUtils.getSubject();
    }

    /**
     * 是否登陆
     *
     * @return boolean
     */
    public static boolean isAuthenticated() {
        return SecurityUtils.getSubject().isAuthenticated();
    }

    /**
     * 登陆系统
     *
     * @param username     用户名
     * @param password 密码
     */
    public static void login(String username, String password) {
        AuthenticationToken token = new UsernamePasswordToken(username, password);
        getSubject().login(token);
    }

    /**
     * 获取登录用户信息
     * @return
     */
    public static User getUser() {
        return (User)getObject("user");
    }

    /**
     * 设置登录用户信息
     * @param user
     */
    public static void setUser(User user){
        storeObject("user", user);
    }

    /**
     * 登出系统
     */
    public static void logout() {
        getSubject().logout();
    }


    /**
     * 保存数据到session中
     *
     * @param key
     * @param value
     */
    public static void storeObject(String key, Object value) {
        getSession().setAttribute(key, value);
    }

    /**
     * 移除session中的对象
     *
     * @param key
     */
    public static void removeObject(String key) {
        getSession().removeAttribute(key);
    }

    /**
     * 获取session中的对象
     *
     * @param key 对象的key
     * @return Object
     */
    public static Object getObject(String key) {
        return getSession().getAttribute(key);
    }
}
